require(["./config"],function(){
  require(["jquery","template","loadHF","cookie"],function($,template){
      function  Cart(){
        // 配置，使得 cookie 插件在使用时，获取/保存 cookie 不用再手动转换类型
			  $.cookie.json = true;
        this.cart = [];//保存购物车中的商品对象

        this.scrollevent();
        this.loadCart();
        this.addListener();
      }
      Cart.prototype = {
        constructor:Cart,
        scrollevent(){
          // 滚动事件
          $(window).scroll(function(){
            const _top = document.documentElement.scrollTop||document.body.scrollTop;
            if(_top>=370 ){
              $("#cart_sum").css({position:"fixed",top:"20px",right:"150px"});
            }else{
              $("#cart_sum").css({position:"absolute",top:"20px",right:"1px"});
            }
          })
        },
        loadCart(){
          // 从 cookie 中读取购物车内保存的数据
  				const cart = this.cart=$.cookie("cart") || [];
  				// 判断是否为空数组
  				if (cart.length === 0) {
  				  alert("您还未选中任何商品");
            location.href="/html/list.html";
  					return;
  				}

  				// 如果有购物车数据
  				const data = {cart: cart}
  				const html = template("cart-template", data);
  				$("#tbody").html(html);

          // 显示价格总额
          let sum = 0;
  				// console.log($("input.chk_prod:checked"))
  				$("input.chk_prod:checked").each((index, curr) => {
            const $input_main= $(curr).parent().siblings(".cart_main");
  					sum += Number($input_main.children(".sum_price").children("span").text());
            console.log(sum);
  				})
          $("#old_price").text(sum.toFixed(2));
  				$("#sum_price").text((sum*0.95).toFixed(2));
        },
        addListener(){
          // 数量加
          $("#tbody").on("click",".addcart_product",this.addAmountHandler.bind(this));
          // 数量减
          $("#tbody").on("click",".reducecart_product",this.reduceAmountHandler.bind(this));
          // 删除某项
          $("#tbody").on("click",".delete_cart",this.deleteAmountHandler.bind(this));
          // 全选
          $("#chk_all").on("click",this.checkAllHandler.bind(this));
          // 部分选中
				  $("input.chk_prod").on("click", this.checkProdHandler.bind(this));
        },
        // 数量加
        addAmountHandler(event){
          const $src = event.target;
          const $addparent = $($src).parent();
          // 获取数量
          const $addamount=Number($addparent.children(".amount").text());
          // 获取商品id
          const id =$addparent.siblings(".cart_id").text();

          // 获取对应商品对象
				  const prod = this.cart.find(curr => curr.id == id);

          prod.amount += 1;
          // 更新保存购物车 cookie
				  $.cookie("cart", this.cart, {expires: 7, path: "/"});
          // 更改页面商品数量
          $addparent.children(".amount").text(prod.amount);
          const $price = Number($addparent.siblings(".cart_price").children("span").text())
          $addparent.siblings(".sum_price").children("span").text(($price*prod.amount).toFixed(2));

          // 右边结算
          // 显示价格总额
          let sum = 0;
  				// console.log($("input.chk_prod:checked"))
  				$("input.chk_prod:checked").each((index, curr) => {
            const $input_main= $(curr).parent().siblings(".cart_main");
  					sum += Number($input_main.children(".sum_price").children("span").text());
            console.log(sum);
  				})
          $("#old_price").text(sum.toFixed(2));
  				$("#sum_price").text((sum*0.95).toFixed(2));

        },
        // 数量减
        reduceAmountHandler(event){
          const $re_src = event.target;
          const $reparent = $($re_src).parent();
          // 获取数量
          const $re_amount=Number($reparent.children(".amount").text());
          // 获取商品id
          const id =$reparent.siblings(".cart_id").text();
          // 获取对应商品对象
				  const prod = this.cart.find(curr => curr.id == id);
          prod.amount -=1;
          // 更新保存购物车 cookie
				  $.cookie("cart", this.cart, {expires: 7, path: "/"});
          // 渲染
          if($re_amount-1>=0){
            $reparent.children(".amount").text(prod.amount);
          }else {
            $reparent.children(".amount").text(0);
          }

          const $re_price = Number($reparent.siblings(".cart_price").children("span").text());
          $reparent.siblings(".sum_price").children("span").text(($re_price*prod.amount).toFixed(2));

          // 显示价格总额
          let sum = 0;
  				// console.log($("input.chk_prod:checked"))
  				$("input.chk_prod:checked").each((index, curr) => {
            const $input_main= $(curr).parent().siblings(".cart_main");
  					sum += Number($input_main.children(".sum_price").children("span").text());
            console.log(sum);
  				})
          $("#old_price").text(sum.toFixed(2));
  				$("#sum_price").text((sum*0.95).toFixed(2));


        },
        // 删除某项
        deleteAmountHandler(event){
          const $main = $(event.target).parent().siblings(".cart_main");
          console.log($main);
          // 获取商品id
          const $id = $main.children("p.cart_id").text();
          // 在购物车的数组中删除指定 id 的商品
          this.cart = this.cart.filter(curr =>curr.id!=$id);
          $.cookie("cart",this.cart,{expires:7,path:"/"})
          // 页面上删除选项
          $main.parent().remove();

          // 显示价格总额
          let sum = 0;
  				// console.log($("input.chk_prod:checked"))
  				$("input.chk_prod:checked").each((index, curr) => {
            const $input_main= $(curr).parent().siblings(".cart_main");
  					sum += Number($input_main.children(".sum_price").children("span").text());
            console.log(sum);
  				})
          $("#old_price").text(sum.toFixed(2));
  				$("#sum_price").text((sum*0.95).toFixed(2));
        },
        // 全选
        checkAllHandler(event){
          const ch = $(event.target).prop("checked")
  				$("input.chk_prod").prop("checked", ch)

          // 显示价格总额
          let sum = 0;
  				// console.log($("input.chk_prod:checked"))
  				$("input.chk_prod:checked").each((index, curr) => {
            const $input_main= $(curr).parent().siblings(".cart_main");
  					sum += Number($input_main.children(".sum_price").children("span").text());
            console.log(sum);
  				})
          $("#old_price").text(sum.toFixed(2));
  				$("#sum_price").text((sum*0.95).toFixed(2));

        },
        // 部分选中处理
  			checkProdHandler() {
  				// 已被选中的复选框
  				// $("input.c hk_prod:checked")
  				$("#chk_all").prop("checked", $("input.chk_prod:checked").length === this.cart.length)

          // 显示价格总额
          let sum = 0;
  				// console.log($("input.chk_prod:checked"))
  				$("input.chk_prod:checked").each((index, curr) => {
            const $input_main= $(curr).parent().siblings(".cart_main");
  					sum += Number($input_main.children(".sum_price").children("span").text());
            console.log(sum);
  				})
          $("#old_price").text(sum.toFixed(2));
  				$("#sum_price").text((sum*0.95).toFixed(2));

        }
      }

      new Cart();
  })
})
